home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
netz
/
term
/
extras
/
source
/
gtlayout-source.lha
/
LTP_CreateObjectNode.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-04-14
|
4KB
|
264 lines
/* GadTools layout toolkit
**
** Copyright © 1993-1995 by Olaf `Olsen' Barthel
** Freely distributable.
*/
#include "gtlayout_global.h"
ObjectNode * __regargs
LTP_CreateObjectNode(LayoutHandle *handle,UBYTE type,ULONG id,STRPTR label)
{
ObjectNode *node;
ULONG size,extra;
switch(type)
{
#ifdef DO_GAUGE_KIND
case GAUGE_KIND:
extra = sizeof(GaugeExtra);
break;
#endif
#ifdef DO_TAPEDECK_KIND
case TAPEDECK_KIND:
extra = sizeof(TapeDeckExtra);
break;
#endif /* DO_TAPEDECK_KIND */
#ifdef DO_LEVEL_KIND
case LEVEL_KIND:
extra = sizeof(LevelExtra);
break;
#endif /* DO_LEVEL_KIND */
case BUTTON_KIND:
extra = sizeof(ButtonExtra);
break;
case XBAR_KIND:
case YBAR_KIND:
extra = sizeof(BarExtra);
break;
case BOX_KIND:
extra = sizeof(BoxExtra);
break;
case FRAME_KIND:
extra = sizeof(FrameExtra);
break;
case PICKER_KIND:
extra = sizeof(PickerExtra);
break;
case INCREMENTER_KIND:
extra = sizeof(IncrementerExtra);
break;
case LISTVIEW_KIND:
extra = sizeof(ListExtra);
break;
case MX_KIND:
extra = sizeof(RadioExtra);
break;
case TEXT_KIND:
extra = sizeof(TextExtra);
break;
case NUMBER_KIND:
extra = sizeof(NumberExtra);
break;
case CYCLE_KIND:
extra = sizeof(CycleExtra);
break;
case PALETTE_KIND:
extra = sizeof(PalExtra);
break;
case SLIDER_KIND:
extra = sizeof(SliderExtra);
break;
case SCROLLER_KIND:
extra = sizeof(ScrollerExtra);
break;
case INTEGER_KIND:
extra = sizeof(IntegerExtra);
break;
case FRACTION_KIND:
case PASSWORD_KIND:
case STRING_KIND:
extra = sizeof(StringExtra);
break;
case HORIZONTAL_KIND:
case VERTICAL_KIND:
extra = sizeof(GroupExtra);
break;
#ifdef DO_BOOPSI_KIND
case BOOPSI_KIND:
extra = sizeof(BOOPSIExtra);
break;
#endif /* DO_BOOPSI_KIND */
default:
extra = 0;
break;
}
size = offsetof(ObjectNode,Special) + extra;
if(node = LTP_Alloc(handle,size))
{
node -> Type = type;
node -> Label = label;
node -> ID = id;
node -> PointBack = node;
switch(type)
{
case LISTVIEW_KIND:
node -> LabelPlace = PLACE_ABOVE;
node -> Lines = 1;
node -> Current = ~0;
node -> Special . List . LinkID = -1;
break;
case PASSWORD_KIND:
case STRING_KIND:
node -> Special . String . LayoutHandle = handle;
node -> Special . String . LinkID = -1;
node -> Special . String . MaxChars = 256;
break;
case INTEGER_KIND:
node -> Special . Integer . LayoutHandle = handle;
node -> Min = -2147483647;
node -> Max = 2147483647;
node -> Special . Integer . MaxChars = 11;
break;
#ifdef DO_BOOPSI_KIND
case BOOPSI_KIND:
node -> Special . BOOPSI . Link = NIL_LINK;
break;
#endif /* DO_BOOPSI_KIND */
#ifdef DO_FRACTION_KIND
case FRACTION_KIND:
node -> Special . String . LayoutHandle = handle;
node -> Special . String . LinkID = -1;
node -> Max = 2147483647;
node -> Special . String . MaxChars = 12;
break;
#endif
#ifdef DO_TAPEDECK_KIND
case TAPEDECK_KIND:
node -> LabelPlace = PLACE_BELOW;
break;
#endif /* DO_TAPEDECK_KIND */
case MX_KIND:
node -> LabelPlace = PLACE_RIGHT;
node -> Special . Radio . TitlePlace = PLACETEXT_LEFT;
node -> Special . Radio . AutoPageID = -1;
break;
case CYCLE_KIND:
node -> Special . Cycle . AutoPageID = -1;
break;
case SCROLLER_KIND:
node -> Special . Scroller . Visible = 2;
break;
case SLIDER_KIND:
node -> Special . Slider . LevelPlace = PLACETEXT_LEFT;
break;
case FRAME_KIND:
node -> Special . Frame . DrawBox = TRUE;
break;
case BOX_KIND:
node -> Special . Box . DrawBox = TRUE;
break;
case HORIZONTAL_KIND:
node -> Type = GROUP_KIND;
node -> Special . Group . Horizontal = TRUE;
break;
case VERTICAL_KIND:
node -> Type = GROUP_KIND;
break;
#ifdef DO_LEVEL_KIND
case LEVEL_KIND:
node -> Special . Level . LevelPlace = PLACETEXT_LEFT;
node -> LabelPlace = PLACE_LEFT;
if(LocaleBase && LocaleBase -> lb_SysPatches)
node -> Special . Level . LevelFormat = "%lD";
else
node -> Special . Level . LevelFormat = "%ld";
break;
#endif /* DO_LEVEL_KIND */
}
}
return(node);
}